第 七 章  
图 像 的 形 态 学 处 理  
汇报人:陈西PPT工作室  
目录  
态学基础  
值图像的基本形态学运算  
度图像的形态学运算  
15——16年度优秀心理委员  
形态学基础  
形态学  
形态学,即数学形态学, 是图像处理中应用最为广泛的技术之一。数学  
形态学的语言是集合论,其主要应用是从图像中提取对于表达和描绘区域  
形状有用的图像分量,如边界和连通区域等,方便后续的识别工作能够抓  
住目标对象最为本质的形状特征。  
重要的集合关系  
属于与不属于  
并集  
交集  
差集  
补集  
平移与反射  
平移:将一个集合A平移距离x  
A  x  a  x a  A  
   
反射:A中所有元素相对原点旋转180°,  
所得到的新集合称为A的反射集。  
二值图像的  
基本形态学运算  
腐蚀  
腐蚀原理图  
集合A被集合B腐蚀表示为:  
AB  z (B ) A  
   
z
A:输入图像  
B:结构元素  
二值图像的实际腐蚀过程  
结构元素:  
设有两幅图像A、B,若A是被处理的图像,  
B是用来处理A的图像,则称B为结构元素。  
Halcon中的腐蚀运算  
Region:  
要进行腐蚀操作的区域  
RegionErosion:  
腐蚀后获得的区域  
Radius:  
圆形结构元素的半径  
Width、Height:  
矩形结构元素的宽和高  
StructElement:  
生成的结构元素  
Iterations:  
迭代次数,即腐蚀的次数  
Halcon中的腐蚀运算  
算子erosionl 与erosion2区别:  
erosionl参考点为结构元素中心,  
erosion2可自行设置参考点。  
腐蚀实例  
read_image (Image, 'D:/腐蚀.png')  
get_image_size (Image, Width, Height)  
dev_open_window (0, 0, Width, Height, 'black',WindowHandle)  
dev_display (Image)  
*
*
*
将图像转化为灰度图像  
rgb1_to_gray (Image, GrayImage)  
将图像通过阈值处理转化为二值化图像  
threshold (GrayImage, Regions, 134, 239)  
使用半径11的圆形结构腐蚀得到区域  
erosion_circle (Regions, RegionErosion, 11)  
a)原图  
(b)二值化图像 (c)圆形结构腐蚀  
腐蚀实例  
*
使用长和宽均为11的矩形结构元素腐蚀得到区域  
dilation_rectangle1 (Regions, RegionDilation1, 11, 13)  
生成短11,长轴13的椭圆形区域,作为结构元素  
gen_ellipse (Ellipse, 100, 100, 0, 13, 11)  
使用生成的椭圆形结构元素腐蚀得到区域  
erosion1 (Regions, Ellipse, RegionErosion2, 1)  
使用生成的椭圆形结构元素腐蚀得到区域  
*
*
*
(d)矩形结构腐蚀  
(e)生成结构腐蚀 (f)生成结构腐蚀  
指定参考点)  
可设置参考点)  
erosion2 (Regions, Ellipse, RegionErosion3, 0, 0, 1)  
膨胀  
膨胀原理图  
集合A被集合B膨胀表示为:  
A B  z (B)  A    
z
:空集  
B :结构元素  
二值图像的实际膨胀过程  
膨胀可以填充图像内部的小孔及图像边  
缘处的小凹陷部分,并能够磨平图像向外的  
尖角  
Halcon中的膨胀运算  
Region:  
要进行膨胀操作的区域  
RegionErosion:  
膨胀后获得的区域  
Radius:  
圆形结构元素的半径  
Width、Height:  
矩形结构元素的宽和高  
StructElement:  
生成的结构元素  
Iterations:  
迭代次数,即膨胀的次数  
Halcon中的膨胀运算  
dilation2 与 dilationl 的的不同于类  
似于 erosion2 与 erosionl 的区别  
膨胀  
例题  
read_image (Image, 'D:/膨胀.png')  
get_image_size (Image, Width, Height)  
dev_open_window (0, 0, Width, Height, 'black',WindowHandle)  
dev_display (Image)  
*
*
*
将图像转化为灰度图像  
rgb1_to_gray (Image, GrayImage)  
将图像通过阈值处理转化为二值化图像  
threshold (GrayImage, Regions, 134, 239)  
使用半径11的圆形结构膨胀得到区域  
dilation_circle (Regions, RegionDilation, 11)  
a)原图  
(b)二值化图像 (c)圆形结构膨胀  
膨胀  
例题  
*
*
*
*
使用长13,宽为11的矩形结构元素膨胀得到区域  
dilation_rectangle1 (Regions, RegionDilation1, 11, 13)  
生成短11,长轴13的椭圆形区域,作为结构元素  
gen_ellipse (Ellipse, 100, 100, 0, 13, 11)  
使用生成的椭圆形结构元素膨胀得到区域  
dilation1 (Regions, Ellipse, RegionDilation2, 1)  
使用生成的椭圆形结构元素膨胀得到区域  
d)矩形结构膨胀 (e)生成结构膨胀(f)生成结构膨胀  
指定参考点)  
可设置参考点)  
dilation2 (Regions, Ellipse, RegionDilation3, 0, 0, 1)  
开运算  
结构元B对集合A的的开运算表示为:  
开运算过程图  
A B  ABB  
开运算的计算步骤:  
先腐蚀,后膨胀。  
通过开运算能去除一些孤立的、细小的  
点,平滑毛糙的边缘线,同时原区域面积也  
不会有明显的改变,类似于一种“去毛刺”  
的效果。  
闭运算  
闭运算过程图  
结构元B对集合A的的闭运算表示为:  
A B (A B)B  
闭运算的计算步骤:  
先膨胀,后腐蚀。  
Halcon中的开、闭运算  
Region:  
要进行开运算操作的区域  
StructElement:  
生成的结构元素  
RegionOpening:  
开运算后获得的区域  
Radius:  
圆形结构元素的半径  
Width. Height:  
矩形结构元素的宽和高  
Halcon中的开、闭运算  
Region:  
要进行闭运算操作的区域  
StructElement:  
生成的结构元素  
RegionOpening:  
闭运算后获得的区域  
Radius:  
圆形结构元素的半径  
Width. Height:  
矩形结构元素的宽和高  
开运算  
例题  
opening_circle (Regions1, RegionOpening,11)  
opening_rectangle1 (Regions1, RegionOpening1,11, 11)  
gen_ellipse (Ellipse, 200, 200, 0, 11, 13)  
opening (Regions1, Ellipse, RegionOpening2)  
dev_display (RegionOpening)  
read_image (Image, 'D:/Image 开运算.png')  
rgb1_to_gray (Image, GrayImage)  
get_image_size (GrayImage, Width, Height)  
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowID)  
dev_display (GrayImage)  
dev_display (RegionOpening1)  
threshold (GrayImage, Regions1, 25, 189)  
dev_display (RegionOpening2)  
a)原图  
(b)二值化图像 (c)圆形结构开运算(d)矩形结构开运算(f)生成结构开运算  
闭运算  
例题  
closing_circle (Regions1, RegionClosing, 7)  
closing_rectangle1 (Regions1, RegionClosing1, 9, 9)  
gen_ellipse (Ellipse, 200, 200, 0, 5, 7)  
closing (Regions1, Ellipse, RegionClosing2)  
dev_display (RegionClosing)  
read_image (Image, 'D:/Image 闭运算.png')  
rgb1_to_gray (Image, GrayImage)  
get_image_size (GrayImage, Width, Height)  
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowID)  
dev_display (GrayImage)  
dev_display (RegionClosing1)  
threshold (GrayImage, Regions1, 25, 189)  
dev_display (RegionClosing2)  
a)原图  
(b)二值化图像 (c)圆形结构闭运算(d)矩形结构闭运算(f)生成结构闭bi运算  
击中与击不中原理图  
击中与击不中  
A被B击中或者击不中变换定义为  
。其中,结构元素B不是单个像素,而  
。击中或击不中变换由这两个结构元素定义为:  
在HALCON中击中与击不中变换算子如下:  
hit_or_miss(Region, StructElement1, StructElement2 : RegionHitMiss : Row,  
Column : )  
度图像的  
态学运算  
灰度图像的形态学运算  
上一节的介绍中,所有的算子都是基于区域的,输入的参数类型是  
Region。区域的灰度是二值的,不会发生变化,如通过腐蚀使区域面积变  
小,或者通过彤胀使区域面积变大等。而如果要对灰度图像进行形态学操  
作,变的则是像素的灰度,表现为灰度图像上的亮区域或暗区域的变化。  
在本节的内容中,我们将一起来学习关于灰度图像的形态学运算相关内容,  
在本节中,所运用到的算子的输入类型均是灰度的Image图像。  
灰度腐蚀  
与区域腐蚀类似,灰度值腐蚀收缩前景并扩  
大背景。所以,灰度值腐蚀能够被用来分开相互  
连接的亮物体和连接支离破碎的暗物体。设f 是  
输入函数,b是结构元素,不过此处的b可以看作  
是一个子图像函数,利用结构元素b对f进行腐蚀  
原理图如右图所示。  
Halcon中的灰度腐蚀算子  
gray_erosion(Image, SE : ImageErosion : : )  
gray_erosion_rect(Image : ImageMin : MaskHeight, MaskWidth : )  
gray_erosion_shape(Image : ImageMin : MaskHeight, MaskWidth,  
MaskShape : )  
灰度膨胀  
与灰度腐蚀相似,函数b对函数f 进行灰度膨胀运算可定义为:  
(
f b)(x, y)  max  
   
f (x  x, y  y)  b(x, y) (x  x, y  y) D ;(x, y) Db  
f
Halcon中的灰度腐蚀算子  
gray_dilation(Image, SE : ImageDilation : : )  
gray_dilation_rect(Image : ImageMax : MaskHeight, MaskWidth : )  
gray_dilation_shape(Image : ImageMax : MaskHeight, MaskWidth,  
MaskShape : )  
灰度图像的腐蚀与膨胀、开运算与闭运算操作实例  
gray_erosion_shape (Picture, ImageMin, 5, 5, 'octagon')  
灰度图像进行膨胀操作  
gray_dilation_shape (Picture, ImageMax, 5, 5, 'octagon')  
灰度图像进行开运算操作  
gray_opening_shape (Picture, ImageOpening, 5, 5,  
octagon')  
灰度图像进行闭运算操作  
gray_closing_shape (Picture, ImageClosing, 5, 5, 'octagon')  
*
获取图像  
read_image (Picture, 'D:/picture.png')  
获取图像尺寸大小  
get_image_size (Picture, Width, Height)  
打开与图像适应大小的窗口,并显示图像  
*
*
*
*
'
*
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)  
dev_display (Picture)  
(a)原图  
(b)腐蚀操作  
(c)膨胀操作 (d)开运算操作  
(e)闭运算操作  
灰度图像的顶帽、底帽运算  
*
关闭窗口  
dev_close_window ()  
获取图像  
read_image (image, 'D:/orange.png')  
获取图像尺寸大小打开适应图像大小的窗口  
rgb1_to_gray (image2, GrayImage)  
*生成结构半径为5的圆形结构  
gen_disc_se (SE, 'byte', 5, 5, 0)  
*
*对图像进行顶帽运算处理  
*
gray_tophat (GrayImage, SE, ImageTopHat)  
*对图像进行底帽运算处理  
get_image_size (image, Width, Height)  
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)  
dev_display (image)  
gray_bothat (GrayImage, SE, ImageBotHat)  
a)灰度图像  
(b)顶帽运算结果  
(c)底帽运算结果  
二值图像的形态学  
边界提取  
在二值图像中提取物体的边界,容易想到的一个方法是将所有物体  
内部的点删除 (置为背景色)。当我们逐行扫描原图像时,如果发现一个  
黑点的8邻域都是黑点,那么该点被认为是内部点,对于内部点需要在目  
标图像上将它删除,只有那些8邻域都是黑点的内部点被保存,这相当于  
釆用一个c 的结构元素对原图像进行腐蚀,再用原图像减去腐蚀后的图像,  
这样就恰好删除了这些内部点留下了边界。  
边界提取  
集合A的边界记为 ,设B为一个合适的结构元素,边界提取可表示为:  
在HALCON中求取区域的边界的算子如下:  
boundary(Region : RegionBorder : BoundaryType : )  
边界提取实例  
*
显示图像  
dev_display (Image)  
将图像二值化  
threshold (Image12, Regions, 76, 255)  
边界提取  
boundary (Regions, RegionBorder, 'inner')  
*
关闭窗口  
dev_close_window ()  
获取图像  
read_image (Image, 'D:/Image.png')  
获取图像大小  
get_image_size (Image, Width, Height)  
打开适应图像大小的窗口  
*
*
*
*
*
dev_open_window (0, 0, Width, Height, 'black',  
WindowHandle)  
a)原图  
(b)二值化提取区域 (c)提取区域边界  
孔洞填充  
一个孔洞可以定义为由前景像素相连接的边界所包围的一个背景区域。  
这一节我们将针对填充图像的孔洞介绍一种基于集合膨胀、求补集和交集  
的算法。令A表示包含一个子集的集合,子集的元素是8连通的边界。每个  
边界包围一个背景区域(即一个孔洞),给定每一个孔洞中一个点,然后从  
该点开始填充整个边界包围的区域,  
孔洞填充  
每个边界包围一个背景区域(即一个孔洞),  
给定每一个孔洞中一个点,然后从该点开始填充  
整个边界包围的区域,公式如下:  
过程如右图所示。  
孔洞填充  
*
获取图像  
read_image (Aegyt1, 'egypt1')  
将图像二值化  
threshold (Aegyt1, Region, 0, 140)  
填充孔洞  
fill_up (Region, RegionFillUp)  
*
a)原图  
*
b)阈值分割后图像  
(c)孔洞填充  
本章小结  
在本章中,介绍了形态学的基本概念并学习了多种常见的形态学算法及其典型应用。  
腐蚀、膨胀和击中-击不中是3种最基本的形态学算法,其中腐蚀计算用于消除图像中相对  
背景亮度较高的孤立像素点、收缩细化亮度较高的目标轮廓,并扩展较暗的背景。膨胀操  
作与其作用刚好相反。击中-击不中操作则用于从图像中寻找具有某种像素排列特征的目  
标。经过3种基本算法按照不同的作用顺序组合,可以得到更多的形态学处理算法。图像  
的数学形态学处理通常使用具有一定形态的结构元素与图像进行形态学运算,并进而研究  
图像各部分的关系,以解决噪声抑制、特征提取、边缘检测、图像分割、形状识别、纹理  
分析、图像恢复与重建、图像压缩等图像处理问题。  
习ꢀ题  
7.1数学形态学具有哪些用途?  
7.2若采用一个半径为0.5cm的圆形作为结构元素,对半径为2cm的圆进  
行腐蚀和膨胀运算,分析其结果。  
7
7
7
.3根据二值腐蚀运算的原理,给出编程实现腐蚀运算的步骤。  
.4.根据二值膨胀运算的原理,给出编程实现膨胀运算的步骤。  
.5 什么是图像的骨架?试简述骨架提取的基本原理。